Flash属性提供了一个请求存储属性以便其他请求使用的方式。最常用的情况是在重定向时——比如,Post/Redirect/Get 方式。Flash属性会在重定向前被暂时存储(通常是在session中),让重定向的请求可以获取到,并在重定向后立刻移除。
Spring MVC有两个主要的概念来支持flash属性。FlashMap用来保存flash属性,FlashMapManager用来保存,检索和管理FlashMap实例。
对Flash属性的支持总是打开的,没必要显示的去开启,它不会导致HTTP session的创建。每个请求都有一个输入的FlashMap带着前一个请求传递的参数和一个输出的FlashMap为之后的请求保存属性。无论在Spring MVC中的哪里,都可以通过RequestContextUtils的京唐方法访问FlashMap
带注解的控制器通常不需要直接使用FlashMap。想法的,@RequestMapping方法可以接受类型为RedirectAttributes的参数,并用它在重定向的环境下添加flash属性。通过RedirectAttributes添加的Flash属性会自动传播的到输出的FlashMap中。相似的,在重定向后,输入的FlashMap的属性会自动的添加到目标URL对应的控制器的Model中。

匹配flash属性到请求 flash属性的概念在其他的一些Web框架中存在,且被证明会在并发中暴露问题。这事因为flash属性会在下个请求之前被保存。然而,下一个请求可能不是预期的接受而是其他异步的请求(比如轮询或是自愿请求),这种情况下flash属性被过早的移除。
为了减少这种问题发生的可能性,RedirectView自动为FlashMap实例印上路径,请求参数和目标重定向URL的“章”。在查找输入FlashMap时,默认的FlashMapManager会将该信息与请求匹配。
这并不会完全消除并发问题的可能性,尽管如此,重定向URL中的信息已经大大减少了这个问题。因此建议主要在重定向语义中使用flash属性。